/*
1．定义一个函数，计算两个整型变量的最大公约数（能同时被两个数整除的最大的数）
2．写一个函数能求出三个整型数的最大值
3．编程：设计一个模拟计算器，从键盘输入两个数（整数），再输入算术运算符，求其计算结果。
要求：运算符包括：+、-、*、/（运算结果为浮点数——单精度和双精度均可）、%即可。
4．从终端读入一行字符串，定义一个接口将字符串倒序
5．求出一个整型数的倒序数(1234的倒序数4321)
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int gcd(int a, int b);
int max_in_3(int a, int b, int c);
double calc(int a, int b, char opt);
char *reverse_str(char *str);
int reverse_int(int num);

int main(int argc, char *argv[]) {
  int a = 31, b = 41, c = 59;
  printf("gcd:%d\n", gcd(a, b));
  printf("max_in_3:%d\n", max_in_3(a, b, c));

  int x = 10, y = 3;
  char opt = '/';
  printf("calc result: %.2f\n", calc(x, y, opt));

  char *str = "hello";
  char *rev_str = reverse_str(str);
  printf("reversed string: %s\n", rev_str);
  free(rev_str);

  int num = 1234;
  printf("reversed int: %d\n", reverse_int(num));

  return 0;
}

// 1．定义一个函数，计算两个整型变量的最大公约数（能同时被两个数整除的最大的数）
int gcd(int a, int b) {
  int temp = a;
  while (b) {
    temp = a % b;
    a = b;
    b = temp;
  }
  return a;
}
int max_in_3(int a, int b, int c) {
  int temp = a > b ? a : b;
  return temp > c ? temp : c;
}
double calc(int a, int b, char opt) {
  switch (opt) {
  case '+':
    return a + b;
  case '-':
    return a - b;
  case '*':
    return a * b;
  case '/':
    return (double)a / b;
  case '%':
    return a % b;
  }
}
char *reverse_str(char *str) {
  int len = strlen(str);
  char *ret = malloc(len + 1);
  for (int i = 0; i < len; i++) {
    ret[i] = str[len - i - 1];
  }
  ret[len] = '\0';
  return ret;
}
int reverse_int(int num) {
  int ret = 0;
  while (num) {
    ret = ret * 10 + num % 10;
    num /= 10;
  }
  return ret;
}
